package pe.com.astech.web.controller;


import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.NestedRuntimeException;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import pe.com.astech.web.bean.EmpleadoBean;
import pe.com.astech.web.bean.UsuarioBean;
import pe.com.astech.web.exception.DBException;
import pe.com.astech.web.service.UsuarioService;
import pe.com.astech.web.util.Constantes;


@Controller
@RequestMapping(value = "/autenticarUsuario.html")
public class AutenticarController {

	@Autowired
	UsuarioService usuarioService;
	
	private static final Log log = LogFactory.getLog(AutenticarController.class);
	
	@RequestMapping(method = RequestMethod.GET)
	public String showForm(ModelMap model,HttpServletRequest request) {
		log.info("metodo: showForm" );
		request.getSession().invalidate();
		return Constantes.FORM_ACCESO;
	}
	
	@RequestMapping(params={"accion=validarUsuario"},method = RequestMethod.POST, produces=MediaType.TEXT_HTML_VALUE)
	public String validarUsuario(ModelMap model,HttpServletRequest request,@Valid UsuarioBean usuarioBean,BindingResult result) {
		String mensajeTrazabilidad = "metodo: validarUsuario";
		log.info(mensajeTrazabilidad + " formulario = " + usuarioBean.toString());
		
		if(result.hasErrors()){
			log.info(mensajeTrazabilidad + " Existen Errores ");
			for(FieldError error:result.getFieldErrors()){
				model.addAttribute("error"+error.getField(), error.getDefaultMessage());
			}
			return Constantes.FORM_ACCESO;
		}
		
		EmpleadoBean empleadoBean = null;
		try {
			empleadoBean = usuarioService.validarUsuario(mensajeTrazabilidad,usuarioBean);
		} catch (NestedRuntimeException e) {
			log.error(mensajeTrazabilidad + " ERROR = " + e.getMessage());
			return Constantes.FORM_SINACCESO;
		}
		
		request.getSession(false).setAttribute("sessionListUrlBean", empleadoBean.getPerfilBean().getListUrl());
		request.getSession(false).setAttribute("sessionUsuario", empleadoBean);
		
		return Constantes.FORM_HOME;
	}
	
}
